/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import Facade.Facade;
import Objetos.Cliente;
import Objetos.OS;
import Objetos.Os_funcionarioServico;
import Objetos.Usuario;
import Objetos.ValoresFixos;
import Objetos.Veiculo;
import Objetos.Veiculo_OS;
import com.toedter.calendar.JDateChooser;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFormattedTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.ScrollPaneConstants;
import javax.swing.table.DefaultTableModel;
import javax.swing.text.MaskFormatter;

/**
 *
 * @author celio
 */
public class LancarOS extends JPanel {

    JButton inserir, remover, fechar, limpar;
    JLabel peca, servico, funcionario, valor, orcamentista, placa, modelo, marca, cor, ano, cliente, dataEntrega;
    JComboBox tCodFunc;
    public static JTextField tOrcamentista, tValor, tFuncionario, tPeca, tModelo, tCor, tMarca, tAno, tServico, tCliente;
    JFormattedTextField tPlaca;
    MaskFormatter mascaraPlaca;
    String dataAtual;
    JDateChooser dataEn;
    JTable servicos;
    Vector linhas, dados, cabecalho;
    DefaultTableModel dtm;
    JScrollPane scroller;
    Calendar data;
    Facade fa;
    Veiculo veiculo;
    Cliente cli;
   

    public LancarOS(final Usuario usu) {

        JLabel tela = new JLabel("... :::   Ordem de serviço   ::: ...");
        tela.setBounds(400, 10, 500, 20);
        add(tela);

        data = Calendar.getInstance();
        dataAtual = data.getTime().toLocaleString().substring(0, 10);

        peca = new JLabel("Peça: ");
        servico = new JLabel("Serviço:  ");
        funcionario = new JLabel("Funcionário: ");
        valor = new JLabel("Valor: ");
        tValor = new JTextField();

        try {

            mascaraPlaca = new MaskFormatter("UUU-####");

        } catch (ParseException ex) {
            Logger.getLogger(LancarOS.class.getName()).log(Level.SEVERE, null, ex);
        }

        placa = new JLabel("Placa: ");
        tPlaca = new JFormattedTextField(mascaraPlaca);
        modelo = new JLabel("Modelo: ");
        tModelo = new JTextField();
        marca = new JLabel("Marca: ");
        tMarca = new JTextField();
        cor = new JLabel("Cor: ");
        tCor = new JTextField();
        ano = new JLabel("Ano: ");
        tAno = new JTextField();
        cliente = new JLabel("Cliente: ");
        tCliente = new JTextField();
        dataEntrega = new JLabel("Data de entrega: ");
        dataEn = new JDateChooser();
        tPeca = new JTextField();
        tServico = new JTextField();
        tFuncionario = new JTextField();
        fa = new Facade();
        tCodFunc = new JComboBox(fa.ArraydeFuncionarios_Funcionario(usu));
        inserir = new JButton("Inserir");
        remover = new JButton("Remover");
        fechar = new JButton("Fechar Ordem de serviço");
        limpar = new JButton("Limpar");

        cabecalho = new Vector();
        linhas = new Vector();
        dados = new Vector();

        cabecalho.addElement("Peça");
        cabecalho.addElement("Serviço");
        cabecalho.addElement("Cód.");
        cabecalho.addElement("Funcionário");

        servicos = new JTable(linhas, cabecalho);
        servicos.setFont(new Font("Times New Roman", Font.BOLD, 14));
        dtm = (DefaultTableModel) servicos.getModel();
        scroller = new JScrollPane(servicos, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        servicos.getColumnModel().getColumn(0).setPreferredWidth(200);
        servicos.getColumnModel().getColumn(1).setPreferredWidth(400);
        servicos.getColumnModel().getColumn(2).setPreferredWidth(50);
        servicos.getColumnModel().getColumn(3).setPreferredWidth(200);

        placa.setBounds(10, 50, 80, 20);
        tPlaca.setBounds(90, 50, 80, 20);
        modelo.setBounds(750, 50, 80, 20);
        tModelo.setBounds(800, 50, 100, 20);
        marca.setBounds(750, 80, 80, 20);
        tMarca.setBounds(800, 80, 100, 20);
        ano.setBounds(750, 110, 50, 20);
        tAno.setBounds(800, 110, 80, 20);
        cor.setBounds(750, 140, 80, 20);
        tCor.setBounds(800, 140, 80, 20);
        cliente.setBounds(170, 50, 80, 20);
        tCliente.setBounds(220, 50, 130, 20);
        dataEntrega.setBounds(360, 50, 100, 20);
        dataEn.setBounds(460, 50, 100, 20);
        valor.setBounds(570, 50, 80, 20);
        tValor.setBounds(610, 50, 100, 20);
        peca.setBounds(10, 80, 80, 20);
        tPeca.setBounds(90, 80, 120, 20);
        servico.setBounds(10, 110, 80, 20);
        tServico.setBounds(90, 110, 120, 20);
        funcionario.setBounds(220, 110, 100, 20);
        tCodFunc.setBounds(290, 110, 50, 20);
        tFuncionario.setBounds(350, 110, 120, 20);

        scroller.setBounds(10, 130, 600, 300);
        inserir.setBounds(620, 130, 100, 20);
        remover.setBounds(620, 160, 100, 20);
        limpar.setBounds(620, 190, 100, 20);
        fechar.setBounds(620, 410, 200, 20);

        add(placa);
        add(tPlaca);
        add(modelo);
        add(tModelo);
        add(marca);
        add(tMarca);
        add(cor);
        add(tCor);
        add(ano);
        add(tAno);
        add(cliente);
        add(tCliente);
        add(dataEntrega);
        add(dataEn);
        add(valor);
        add(tValor);
        add(peca);
        add(tPeca);
        add(servico);
        add(tServico);
        add(funcionario);
        add(tCodFunc);
        add(tFuncionario);
        add(scroller);
        add(inserir);
        add(remover);
        add(limpar);
        add(fechar);

        tFuncionario.setEditable(false);
        tCliente.setEditable(false);
        tModelo.setEditable(false);
        tMarca.setEditable(false);
        tAno.setEditable(false);
        tCor.setEditable(false);
        modelo.setVisible(false);
        tModelo.setVisible(false);
        marca.setVisible(false);
        tMarca.setVisible(false);
        ano.setVisible(false);
        tAno.setVisible(false);
        cor.setVisible(false);
        tCor.setVisible(false);

        dataEntrega.setForeground(Color.red);

        tCodFunc.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    String parametro = tCodFunc.getSelectedItem().toString();
                    fa = new Facade();
                    tFuncionario.setText(fa.procurarFuncionario_Funcionario(parametro,usu).getNome());
                } catch (NullPointerException ex) {

                }
            }
        });

        tPlaca.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                fa = new Facade();
                veiculo = fa.procurarPelaPlaca_Veiculo(tPlaca.getText(),usu);
                if (veiculo == null) {

                    JOptionPane.showMessageDialog(null, "Veículo não cadastrado");
                } else {
                    tPlaca.setEditable(false);
                    
                    cli = fa.procurar_Cliente(veiculo.getIdCliente(),usu);

                    tCliente.setText(cli.getNome());

                    tModelo.setText(veiculo.getModeloCarro());
                    tMarca.setText(veiculo.getMarcaVeiculo());
                    tCor.setText(veiculo.getCorCarro());
                    tAno.setText(veiculo.getAnoCarro());

                    modelo.setVisible(true);
                    tModelo.setVisible(true);
                    marca.setVisible(true);
                    tMarca.setVisible(true);
                    ano.setVisible(true);
                    tAno.setVisible(true);
                    cor.setVisible(true);
                    tCor.setVisible(true);

                }

            }
        });

        inserir.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (dataEn.getDate() == null) {

                    JOptionPane.showMessageDialog(null, "Preencha a data de entrega");

                } else {
                    if (tFuncionario.getText().equalsIgnoreCase("")) {
                        JOptionPane.showMessageDialog(null, "Preencha o campo funcionário");
                    } else {
                        dtm.addRow(new Object[]{tPeca.getText(), tServico.getText(), tCodFunc.getSelectedItem().toString(), tFuncionario.getText()});
                        tPeca.setText("");
                        tServico.setText("");
                        tFuncionario.setText("");
                        tCodFunc.setSelectedIndex(0);
                    }
                }
            }
        });

        fechar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                int resposta = JOptionPane.showConfirmDialog(null, "Deseja fechar a O.S.?");
                if (resposta == 0) {
                    fa = new Facade();
                    OS os = new OS();
                    try {
                        os.setValor(Funcoes.funcoes.formatoParaInserir(tValor.getText()));
                    } catch (ParseException ex) {
                        Logger.getLogger(LancarOS.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    os.setPlaca(tPlaca.getText());
                    os.setStatus(ValoresFixos.StatusOS.aberta.getStatus());
                    os.setDataEntrega(Funcoes.funcoes.paraInserirData(dataEn.getDate().toLocaleString().substring(0, 10)));
                    os.setDataInclusao(Funcoes.funcoes.paraInserirData(dataAtual));
                    os.setCliente(cli.getCod_cliente());

                    fa.adicionar_OS(os,usu);

                    int rows = dtm.getRowCount();
                    int ultima = fa.pegarUltima_OS(usu);
                    for (int a = 0; a < rows; a++) {
                        Os_funcionarioServico servico = new Os_funcionarioServico();
                        servico.setIdOs(Integer.toString(ultima));
                        servico.setPeca(servicos.getValueAt(a, 0).toString());
                        servico.setServico(servicos.getValueAt(a, 1).toString());
                        servico.setIdFuncionario(servicos.getValueAt(a, 2).toString());
                        //JOptionPane.showMessageDialog(null, servicos.getValueAt(a, 0)+" - "+servicos.getValueAt(a, 1)+" - "+ servicos.getValueAt(a, 2)+" - "+servicos.getValueAt(a, 3));
                        fa.inserirServicosOS_OS(servico,usu);
                    }
                    Veiculo_OS veos = new Veiculo_OS();
                    veos.setIdVeiculo(veiculo.getCodVeiculo());
                    veos.setIdOS(Integer.toString(ultima));
                    try {
                        veos.setValor(Funcoes.funcoes.formatoParaInserir(tValor.getText()));
                    } catch (ParseException ex) {
                        Logger.getLogger(LancarOS.class.getName()).log(Level.SEVERE, null, ex);
                    }

                    fa.inserirVeiculoOS_Veiculo(veos,usu);

                    int respostaImprimir = JOptionPane.showConfirmDialog(null, "Deseja imprimir a O.S.?\nA impressão também poderá ser feita pelo menu Relatório->OS->O.S.");
                    if (respostaImprimir == 0) {

                        fa = new Facade();
                        fa.imprimirOSporOS_Relatorio(Integer.toString(ultima),usu);

                    }
                    tPlaca.setText("");
                    tMarca.setText("");
                    tModelo.setText("");
                    tValor.setText("");
                    tCliente.setText("");
                    tAno.setText("");
                    tCor.setText("");
                    tPeca.setText("");
                    tServico.setText("");

                    modelo.setVisible(false);
                    tModelo.setVisible(false);
                    marca.setVisible(false);
                    tMarca.setVisible(false);
                    ano.setVisible(false);
                    tAno.setVisible(false);
                    cor.setVisible(false);
                    tCor.setVisible(false);

                    tPlaca.setEditable(true);

                    for (int a = 0; a <= rows; a++) {
                        while (dtm.getRowCount() != 0) {
                            dtm.removeRow(0);
                        }
                    }

                }

            }
        });
        remover.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                dtm.removeRow(servicos.getSelectedRow());

            }
        });

        limpar.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {

                tPlaca.setText("");
                tMarca.setText("");
                tModelo.setText("");
                tValor.setText("");
                tCliente.setText("");
                tAno.setText("");
                tCor.setText("");
                tPeca.setText("");
                tServico.setText("");

                modelo.setVisible(false);
                tModelo.setVisible(false);
                marca.setVisible(false);
                tMarca.setVisible(false);
                ano.setVisible(false);
                tAno.setVisible(false);
                cor.setVisible(false);
                tCor.setVisible(false);

                tPlaca.setEditable(true);

            }
        });

        setLayout(null);
        setBackground(Color.LIGHT_GRAY);
        setBorder(BorderFactory.createBevelBorder(1, Color.DARK_GRAY, Color.DARK_GRAY));
        setSize(800, 800);
        setVisible(true);
        revalidate();
        repaint();
    }

}
